var express = require('express');
var router = express.Router();

var UserToken = require('../db/user_tokens.js');
var bannerDao = require('../dao/banner.js');
var multiparty = require('multiparty');
var bannerRoutes = module.exports;
var fs = require('fs');
var path = require('path');
var CONFIG = require('../config');

/**
 * 添加/编辑推广图
 * @param  token
 * @param  banner_url
 *         url/banner/save
 */
function checkParam(par, cb) {
    if(!par.token) return cb('token不为空！');
    UserToken.checkAllLogin(par.token, null, function (err, errCode, userInfo) {
        if (err) {
            return cb(err);
        }
        if(!userInfo)         return cb('无权限');
        if(!userInfo.isAdmin) return cb('无权限');
        if(!par.banner_url)     return cb('图片路径不为空！');
        delete par.token;
        delete par.is_update;
        return cb(null, par);
    });
}

function uploadAndCheckParam(req, cb) {
    if(!req) return cb('数据异常，请重试！');
    var form = new multiparty.Form({uploadDir: CONFIG.picsBannerPath});
    form.parse(req, function(err, fields, files) {
        if(err) {
            console.log(err);
            cb('添加或编辑商品失败！');
            return;
        }
        var par = {};
        for(var k in fields) {
            if(k[0]) {
                par[k] = fields[k][0];
            }
        }

        var picPath = files.banner_url[0].path;

        var picFileName = picPath;
        if(parseInt(par.is_update) == '1') {
            fs.unlink(picFileName, function(){});
            checkParam(par, function(err, data){
                if(err) {
                    cb(err);
                    return;
                } else {
                    cb(null, data);
                }
            });
        } else if(files.banner_url[0].size != 0 && (parseInt(par.is_update) == '0' || !par.is_update)) {
            var picName = parseInt(10 * Math.random())  + '' + new Date().getTime() + '' + parseInt(100 * Math.random()) + '.png';
            picFileName = path.join(CONFIG.picsBannerPath, picName);
            fs.rename(picPath, picFileName, function(err) {
                if(err) {
                    console.log(err);
                    cb('上传图片发生错误！');
                    return;
                } else {
                    par.banner_url = '/banner/' + picName;
                    checkParam(par, function(err, data){
                        if(err) {
                            fs.unlink(picFileName, function(){});
                            cb(err);
                            return;
                        } else {
                            cb(null, data);
                        }
                    });
                }
            })
        }
    });
}

bannerRoutes.save = function(req, res) {
    uploadAndCheckParam(req, function(err, data) {
        if(err) {
            res.json(new ERR(err, 400));
        } else {
            bannerDao.save(data, function(err, result){
                if(err) {
                    res.json(new ERR(err, 400));
                } else {
                    res.json(new PKG(result));
                }
            });
        }
    });
}
router.post('/save', bannerRoutes.save);

/**
 * 删除推广图
 * @param  token
 * @param  id
 *         url/banner/delete
 */
bannerRoutes.delete = function(req, res) {
    var par = req.body;
    if(!par.token) return res.json(new ERR('token不能为空！', 400));
    UserToken.checkAllLogin(par.token, null, function (err, errCode, userInfo) {
        if (err) {
            return res.json(new ERR(err, 400));
        }
        if(!userInfo.isAdmin) return res.json(new ERR('无权限', 400));
        bannerDao.delete(par, function(err, result){
            if(err) {
                res.json(new ERR(err, 400));
            } else {
                res.json(new PKG(result));
            }
        });
    });
}
router.post('/delete', bannerRoutes.delete);

/**
 * 获取推广图 (3张)
 *         url/banner/show
 */
bannerRoutes.show = function(req, res) {
    bannerDao.show(function(err, data){
       if(err) {
           res.json(new ERR(err));
       } else {
           res.json(new PKG(data));
       }
    });
}
router.get('/show', bannerRoutes.show);


/**
 * 获取推广图列表
 * @param  token
 * @param  size
 * @param  page
 *         url/banner/list
 */
bannerRoutes.list = function(req, res) {
    var par = req.body;
    if(!par.token) return res.json(new ERR('token不能为空！', 400));
    UserToken.checkAllLogin(par.token, null, function (err, errCode, userInfo) {
        if (err) {
            return res.json(new ERR(err, 400));
        }
        par.size = parseInt(par.size);
        if(!par.page) {
            par.start = 0;
        } else {
            par.start = (parseInt(par.page) - 1) * parseInt(par.size);
        }
        bannerDao.list(function(err, data){
            if(err) {
                res.json(new ERR(err));
            } else {
                res.json(data);
            }
        });
    });
}
router.get('/list', bannerRoutes.list);

module.exports = router;